package com.weishi.project.sport.util.dynamometerTiming;

import com.weishi.project.training.service.IDynamometerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.*;

/**
 * 删除 3 天前的数据，表为 ： tbl_dynamometer
 */
@Component
public class DynamometerTimings implements ServletContextListener {

    //时间间隔(一天)
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

    @Autowired
    private IDynamometerService dynamometerService;

    /**
     * 定时任务必要的参数不可删除
     */
    private Timer timer = null;


    // 增加或减少天数
    public Date addDay(Date date, int num) {
        Calendar startDT = Calendar.getInstance();
        startDT.setTime(date);
        startDT.add(Calendar.DAY_OF_MONTH, num);
        return startDT.getTime();
    }


    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        timer = new Timer(true);
        servletContextEvent.getServletContext().log("删除 3 天前的数据，表为 ： tbl_dynamometer  ----定时器已启动！");

        /**
         * 需要使用定时器，把下面的注释打开
         */
        //项目启动之后延迟10秒开始执行计时，每1小时1执行一次  3600000
        //timer.schedule(new OneTask(), 15000, 3600000);

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 1); //凌晨1点
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date date=calendar.getTime(); //第一次执行定时任务的时间
        //如果第一次执行定时任务的时间 小于当前的时间
        //此时要在 第一次执行定时任务的时间加一天，以便此任务在下个时间点执行。如果不加一天，任务会立即执行。
        if (date.before(new Date())) {
            date = this.addDay(date, 1);
        }

        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
        timer.schedule(new OneTask(),date,PERIOD_DAY);

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        if (timer != null) {
            timer.cancel();
            servletContextEvent.getServletContext().log("定时器销毁");
        }
    }




    /**
     * 要执行的代码
     */
    class OneTask extends TimerTask {//继承TimerTask类



        /**
         * 删除 3 天前的数据，表为 ： tbl_dynamometer
         */
        @Transactional
        @Override
        public void run() {

            try {
                // 删除数据的业务代码
                dynamometerService.removeByIds(dynamometerService.getThreeDayFrontList());
            }catch (Exception e){
                System.out.println(e.getMessage());
            }





        }
    }
}
